/*
 * (C) 2009, Elephant Seven Hamburg Gmbh, 
 * Author: Detlev Wiese
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 
 * use this file except in compliance with the License. You may obtain a copy 
 * of the License at
 *  
 *     http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.se and its accompanying notice file is
 * included with the distribution. 
 */ 
package com.e7.streams;

/**
 * <P>This class represents infinite streams of Integer-Objects.</P>
 *  
 */
public class IntegerStream extends AbstractStream<Integer> 
{
	private int current; 
	private int step; 
	
	/**
	 * Create a stream of integers starting at zero.  
	 */
	public IntegerStream() {
		current = 1;
		step = 1; 
	}
	
	/**
	 * Create a stream of integers starting with a given integer!
	 * @param start The first element of the receiver
	 */
	public IntegerStream(int start) {
		current = start;
		step = 1; 
	}
	
	/**
	 * Create a stream of integers starting with a given integer using the 
	 * increment given!
	 * @param start The first element of the receiver
	 * @param increment The increment to apply for subsequent elements
	 */
	public IntegerStream(int start, int increment) {
		current = start;
		step = increment; 
	}
	
	/**
	 * {@inheritDoc}
	 * <P>Note: an {@code IntegerStream} will always return true, because 
	 * it is of virtually infinite length.</P>
	 */
	public boolean hasNext() {
		return true;
	}

	public Integer next() {
		int result = current;  
		current += step;
		return result; 
	}
}
